package de.uv.kilter.core;

import java.util.List;


public interface INode {

	public String getName();
	public void setName(String name);
	
	public long getId();
	public void setId(long id);
	
	public int getCapacity();
	public void setCapacity(int capacity);
	public void addCapacity(int capacity);
	
	public int getOriginalCapacity();
	public void setOriginalCapacity(int originalCapacity);
	public void addOriginalCapacity(int originalCapacity);
	
	public void addInboundingConnection(IConnection inboundingConnection);
	public List<IConnection> getInboundingConnections();
	public void removeInboundingConnection(IConnection inboundingConnection);
	public void clearInboundingConnections();
	
	public void addOutboundingConnection(IConnection outboundingConnection);
	public List<IConnection> getOutboundingConnections();
	public void removeOutboundingConnection(IConnection outboundingConnection);
	public void clearOutboundingConnections();
	
	public List<IConnection> getInboundingPhantomConnections();
	public void removeInboundingPhantomConnection(IConnection inboundingPhantomConnection);
	public void removeAllInboundingPhantomConnections();
	public IConnection getInboundingPhantomConnectionForGivenSourceNode(INode sourceNode);
	
	public List<IConnection> getOutboundingPhantomConnections();
	public void removeOutboundingPhantomConnection(IConnection outboundingPhantomConnection);
	public void removeAllOutboundingPhantomConnections();
	public IConnection getOutboundingPhantomConnectionForGivenTargetNode(INode targetNode);

	/**
	 * This method is used to calculate all marked nodes. 
	 * 
	 * @return - all marked nodes
	 */
	public List<INode> getMarkableNodes();
	
	/**
	 * This method creates an identical copy of this node, without its connections.
	 * @return - copy without connections
	 */
	public INode getCopyWithoutConnections();
	
	public static final int PLUS = +1;
	public static final int MINUS = -1;
}
